<?php

namespace app\index\controller;

//导入模型类
use app\index\model\Staff;
class Add
{

    //一、用data方法创建数据对象，来完成新增
    public function index(){

        //1.创建数据:与表中字段对应
        $data = [];
        $data['name'] = '周星星1';
        $data['sex'] = 1;
        $data['age'] = 39;
        $data['salary'] = 3500;
        $data['dept'] = 3;
        $data['hiredata'] = date('Y-m-d',time());

        //2.创建数据对象
        $model = (new Staff) -> data($data);

        //3.获取新增操作执行前:数据对象原始数据
        $data_before = $model -> getData();

        //4.查看新增操作执行前的数据对象:$model
        echo '查看新增操作执行前的数据对象:<br />';
        dump($data_before);
        //INSERT INTO `tp5_staff` (`name` , `sex` , `age` , `salary` , `dept` , `hiredata`) VALUES ('周星星' , 1 , 39 , 3500 , 3 , '2016-11-25')
        //5.将数据对象原始数据写入数据表中,返回影响记录数
        $affected = $model -> allowField(true) -> save();

        //6.获取新增操作执行后:数据对象原始数据
        $data_after = $model -> getData();

        //7.查看新增操作执行后的数据对象:$model
        echo '查看新增操作执行后的数据对象:<br />';
        dump($data_after);

        //8. 获取新增记录的主键id,等价于: $model -> id
        $insert_ID = $data_after['id'];

        //6.验证是否新增成功
        echo $affected ? '新增成功!新记录主键id是:'.$insert_ID : '新增失败!';
    }

    //二、给sava方法传参方式，完成新增操作
    public function index1(){

        //1.创建数据:与表中字段对应
        $data = [];
        $data['name'] = '紫霞仙子';
        $data['sex'] = 0;
        $data['age'] = 19;
        $data['salary'] = 7800;
        $data['dept'] = 2;
        $data['hiredata'] = date('Y-m-d',time());

//        //2.创建模型对象
//        $model = new Staff($data);
//
//        //3.将数据对象原始数据写入数据表中,返回影响记录数
//        $affected = $model -> allowField(true) -> save();


        //2.创建模型对象
        $model = new Staff();

        //3.将数据参数传入save方法，将原始数据写入表中,并返回影响记录数
        $affected = $model -> allowField(true) -> save($data);

        //3.验证是否新增成功
        echo $affected ? '新增成功!新记录主键id是:'.$model->getData('id') : '新增失败!';
    }
    //三、用魔术方法创建数据对象，完成新增数据操作  Model类的魔术方法:__set( )
    public function index2(){

        //1.创建模型对象
        $model = new Staff();

        //2.创建数据:与表中字段对应
        $model -> name = '朱老师';
        $model -> sex = 1;
        $model -> age = 31;
        $model -> salary = 4600;
        $model -> dept = 1;
        $model -> hiredata = date('Y-m-d',time());

        //3.将数据对象原始数据写入数据表中,返回影响记录数
        $affected = $model -> allowField(true) -> save();

        //3.验证是否新增成功
        //$model -> id：是调用Model类中的魔术方法__get( )方法实现的
        echo $affected ? '新增成功!新记录主键id是:'.($model -> id) : '新增失败!';

    }
    //save方法多次调用的问题
    //用save方法连续新增数据时，第二次调用时，数据对象中存在有第一次调用时创建的自增主键的(如:id),该id值会被认为是更新条件，而将新增误判为更新操作。
    //所以，同一脚本中，第2次调用save方法新增时，一定要在save方法前添加isUpdata(false)方法，来规避这个问题。
    public function index3(){
        //1.创建模型对象
        $model = new Staff();

        //2.创建数据:与表中字段对应
        $model -> name = '王老师';
        $model -> sex = 1;
        $model -> age = 20;
        $model -> salary = 5000;
        $model -> dept = 3;
        $model -> hiredata = date('Y-m-d',time());

        //3.将数据对象原始数据写入数据表中,返回影响记录数
        $affected = $model -> allowField(true) -> save();

        //4.再创建一个要添加到表中的数据
        $model -> name = '张老师';
        $model -> sex = 1;
        $model -> age = 50;
        $model -> salary = 4600;
        $model -> dept = 2;
        $model -> hiredata = date('Y-m-d',time());

        //5.将该数据添加到表中
//        $affected = $model -> allowField(true) -> save();
        //5.将该数据添加到表中
        $affected = $model
            -> allowField(true)    //过滤非表中字段
            -> setAttr('id',null)   //将数据对像主键置空
            -> isUpdate(false)   //忽略主键
            -> save();  	 //执行新增操作

        //3.验证是否新增成功
        echo $affected ? '新增成功!新记录主键id是:'.($model -> id) : '新增失败!';
    }
    //2.同时新增多条记录:saveAll方法
    function index4(){
        //创建数据
        $data[] = ['name'=>'阿芳','sex'=>0,'age'=>19,'salary'=>3000,'hiredata'=>date('Y-m_d',time())];
        $data[] = ['name'=>'阿勇','sex'=>1,'age'=>20,'salary'=>4500,'hiredata'=>date('Y-m_d',time())];
        $data[] = ['name'=>'阿华','sex'=>1,'age'=>39,'salary'=>6800,'hiredata'=>date('Y-m_d',time())];

        //创建模型对象
        $model = new Staff();

        //执行新增操作,返回对象数组,数组元素数量与新增数据相同
        //每个对象数据元素，都是一个数据对象$data
        $result = $model
            -> allowField(true)
            -> saveAll($data);
//INSERT INTO `tp5_staff` (`name` , `sex` , `age` , `salary` , `hiredate`) VALUES ('阿芳' , 0 , 19 , 3000 , '2016-11_25')
//INSERT INTO `tp5_staff` (`name` , `sex` , `age` , `salary` , `hiredate`) VALUES ('阿勇' , 1 , 20 , 4500 , '2016-11_25')
//INSERT INTO `tp5_staff` (`name` , `sex` , `age` , `salary` , `hiredate`) VALUES ('阿华' , 1 , 39 , 6800 , '2016-11_25')
        //3.验证是否新增成功
        echo $result ? '新增成功!' : '新增失败!';

        //4.查看新增的数据集
        echo '<br /> 新增的数据如下: <br/>';

        //5.对象数组，需要用循环输出
        foreach ($result as  $value) {

            //获取对象数组中，每一个数据对象的原始数据
            $data = $value -> getData();

            //内循环中遍历输出每个数据对象中的原始数据
            foreach ($data as $key => $value) {
                echo $key.'=>'.$value.' | ';
            }
            echo '<br />';
        }
    }
    //5.新增数据之静态方法:create( ) 返回数据对象,不是受影响记录数量，一定要注意。
    public function index5(){

        //创建要插入到表中的数据
        $data['name'] = '小沈阳';
        $data['sex'] = 1;
        $data['age'] = 40;
        $data['salary'] = 3900;
        $data['dept'] = 2;
        $data['hiredata'] = date('Y-m-d',time());

        //显示要添加到表中原始数据
        echo '要添加到表中的数据如下:<br/>';
        dump($data);

        //新增数据到表中，并返回数据对象
        $model = Staff::create($data);

        //获取新增数据的自增主键id
        $insertId = $model->getData('id');

        //判断是否新增成功,成功则显示提示信息，并输出新增记录的主键id
        echo $model ? '新增成功!插入id是:'.$insertId.'<br />':'新增失败!<br />';

        //获取新增成功后的,数据对象中的原始数据
        $result = $model -> getData();

        //查看数据对象原始数据
        echo '已添加到表中的数据如下:<br/>';
        dump($result);

    }

    //4.insert静态调用
    public function index6(){


        //创建要插入到表中的数据
        $data['name'] = '小沈阳';
        $data['sex'] = 1;
//        $data['age'] = 40;
        $data['salary'] = 6000;
        $data['dept'] = 2;
        $data['hiredata'] = date('Y-m-d',time());

        //显示要添加到表中原始数据
        echo '要添加到表中的数据如下:<br/>';
        dump($data);

        //插入数据到表中，并返回受影响记录数量
        $affected = Staff::insert($data);

        //判断是否新增成功,成功则显示提示信息
        echo $affected ? "新增成功!<br />":'新增失败!<br />';
    }



}
